為什麼明明在本地端跑都好好的,為什麼一上線就炸了?
剛踏入軟體工程師這個領域滿一年,這句話大概是我在心裡吶喊過最多次的一句話。以前在學校做專題或實驗時,專案較小,使用者不多,目標也很單純:「讓功能可以動」。資料庫能寫入、檔案能上傳,就算是大功告成。
然而真正進入企業,才發現真實世界的軟體工程領域到底有多龐大、多深不可測。實務上,面對大型系統與龐大的流量時,情況完全不同。我們寫的程式碼,是疊加在無數的底層網路、雲端服務與開源套件之上。在這種疊床架屋的龐大架構下,最怕的從來不是功能寫不出來,而是系統一上線,就在某個意想不到的環節徹底崩潰。

(圖片來源 : programmerHumor.io)
說到這裡,想跟大家分享一個小故事。
記得之前還在實習的時候,主管請我去觀察一次壓力測試下的系統流量變化。當時的我對 CPU、Memory 或是 I/O 飆高代表的深層意義根本一知半解。於是,我理所當然地把監控 Dashboard 上的圖表全部截圖下來貼到報告裡,心想:主管比較有經驗,把圖放上去他一定看得懂吧!
結果開會時,主管指著其中一張圖問我:這張圖你想表達什麼?
我當下腦袋一片空白,一句話都說不出來。
主管就嚴肅的說:如果你不知道這張圖要表達什麼,就代表它不用放上來。
當下真的覺得好可怕(嗚嗚嗚),但也讓我對實習還有工作心態上有所轉變
它讓我徹底體悟到一個核心價值:每個技術決策與產出,背後都要有清晰的原因和數據支撐。 以前在學校,可能是老師規定,或是學長姊怎麼做我們就跟著做;但現在面對真實的大型系統,達到目的的路徑有千百條,我們必須清楚知道為什麼選這條路,而不是一昧地遵循,而這也是我在AI時代中很大的感觸,我們慢慢從開發者的角色轉變成決策者,也因此每次都決定都必須清楚知道目的與利弊,使用AI查資料或寫程式時也必須時時質疑和了解每一個決策背後的意義(好啦有點跑題了)。
回到正題,學校可能學過一個好的軟體架構,是為了解決真實世界的挑戰,必須跳脫把功能做完的思維,轉而擁抱現代軟體架構的核心,也就是俗稱的三高:

在大型的服務系統裡面,很常遇到突發狀況,如果今天有一萬個使用者,同時在網路訊號極差的高鐵上,試圖上傳報表或照片到 AWS S3,我們的系統還能活著嗎?會不會因為幾次 Timeout,就導致系統卡死?會不會因為短暫的斷線,產生一堆重複的髒資料?以及部署之後要怎麼確保程式碼可以持續整合跟持續部署,這就是我們這 30 天要解決的問題。
帶著大家了解軟體工程的重要觀念,打造一個高併發的AWS S3 儲存微服務,並且最終部屬在K8s的叢集上,實作真正的HA架構,詳細內容會包含:
我已經將文章中所有用到的程式碼以及完整的s3-service微服務放到github上,大家都可以pull下來參考,或是自己來實作喔!
Github : 2026-ithome-s3-service
我們不需要先具備複雜的 K8s 或雲端架構經驗,我會帶著大家從 localhost 一步步動手建置:
清楚知道每個技術決策背後的意義,並用數據來證明它,這才是一個能持續自我提升、不會被時代淘汰的工程師應具備的能力!
準備好你的 IDE 和終端機,我們就要正式開始啦!